// 操作符:
//  C语言是非常灵活的:
//      C语言提供了非常丰富的操作符,使得使用起来就比较灵活
//  目前以简单介绍为主
#include<stdio.h>
// 算术操作符: + - * / %
// int main(){
//     int a = 7 / 2; 
//     float a2 = 7 / 2.0; // 除号的两端都是整数时,执行的是整数除法,如果两端只有有一个浮点数就执行浮点数的除法
//     int b = 7 % 2; // 取模:取模操作符两端只能是整数
//     printf("%d %.1f %d \n",a,a2,b);
//     return 0;
// }


// 移位操作符: << >>



// 位操作符: & ^ |



// 赋值操作符: = += -= *= /= ^= |= >>= <<=
// int main(){
//     int a = 0; // 初始化
//     a = 20; // 赋值
//     printf("%d \n",a);
//     a += 3; // a = a + 3
//     printf("%d \n",a);
//     a -= 3; // a = a - 3
//     printf("%d \n",a);
//     return 0;
// }


// 双目操作符:a + b
// 单目操作符:只有一个操作数
// int main(){
//     // !:逻辑反操作
//     int flag = 0; // C语言中,0表示假,非0表示真
//     if(!flag){
//         printf("False");
//     }
//     else{
//         printf("True");
//     }


//     // -/+:负/正
//     int a = -10;
//     int b = -a;
//     printf("%d",b); 


//     // &:取地址



//     // sizeof:操作数的类型长度(以字节为单位)
//     int a = 10;
//     int b = 20;
//     printf("%d \n",sizeof(a));
//     printf("%d \n",sizeof(int));
//     printf("%d \n",sizeof a); // 4
    
//     int arr[10] = { 0 };
//     printf("%d \n",sizeof(arr)); // 40 计算的是整个数组的大小,单位是字节
//     printf("%d \n",sizeof arr[0]); // 4
//     printf("%d \n",sizeof arr / sizeof arr[0]); // 10,数组的元素个数


//     // ~:对一个数的二进制按位取反



//     // --/++:前置--/++,先运算在赋值;后置--/++先赋值后运算
//     int a = 10;
//     int b = a++; // 先使用在赋值
//     printf("%d %d \n",a,b); // 11 10
//     a = 10 ; 
//     b = ++a; // 先赋值后运算
//     printf("%d %d\n",a,b ); // 11 11
    

//     // *:间接访问操作符(解引用操作符)


//     (类型):强制类型转换
//     int a = (int)3.14;
//     int a = int(3.14) // error
//     printf("%d",a);
//     3.14 字面浮点数,编译器默认理解double类型

//     return 0;
// }


// 关系操作符: > >= < <= == !=
// int main()
// {   
//     // == and !=
//     int a = 0;
//     printf("input a num for password:");
//     scanf("%d",&a);
//     if(a == 3){
//         printf("hehe\n");
//     }
//     if (a != 3){
//         printf("hahaha\n");
//     }
//     return 0;
// }

// 逻辑操作符:
//  && 逻辑与
//  || 逻辑或

// int main(){
//     // &&:逻辑与-并且,相当于and
//     // ||:逻辑或-或者,相当于or

//     int a = 10;
//     int b = 0;
//     if(a && b){
//         printf("hehe\n");
//     }
//     if(a || b){
//         printf("haha\n");
//     }
//     return 0;
// }


// 三目操作符:有三个操作数
//  表达式1?表达式2:表达式3
//      如果表达式1为真:表达式2成立,表达式3不成立
//      如果表达式1为假:表达式3成立,表达式2不成立
// int main(){
//     int a ;
//     int b ;
//     scanf("%d %d",&a,&b); 
//     int r = a > b? a : b;
//     printf("%d",r);
//     return 0;
// }


// 逗号表达式:逗号隔开的一串表达式
// 特点:从左向右依次计算,表达式的结果式最后一个表达式的结果
// int main(){
//     int a = 10;
//     int b = 20;
//     int c = 0;
//     int d = (c = a - 2,a = b + c,c - 3); 
//     printf("%d\n",d);

//     return 0;
// }


// 下标引用、函数调用和结构成员:[] () . ->

// 下标引用操作符
//int main(){
//    int arr[10] = {1,2,3,4,5,6,7,8,9}; // 这里[]是定义内存
//    int n = 3;
//    arr[n]; // []就是下标引用操作符 arr和3就是[]的操作数 可以使用变量
//    printf("%d",arr[n]);
//    // a + b
//    return 0;
//}


// 函数调用操作符
int add(int x,int y){
    return x + y;
}

int main(){
    int sum = add(2,3); // ()就是函数调用操作符,2 3 是操作数
    printf("%d",sum) ;
    return 0;
}
